R包tidyLPA的潜剖面分析(LPA)
tidyLPA的LPA
tidyLPA包的开发目的在于使R实现LPA变得更容易,它为广泛使用的mclust、MplusAutomation等包(这些是LPA的主流包)提供了一个框架,用于高斯混合建模。因此,tidyLPA并不包含直接执行LPA的代码,而是封装了mclust、MplusAutomation等包中的LPA相关函数,使它们的调用更方便。
tidyLPA的主要贡献是:
(1)提供指定LPA通用模型的功能;
(2)通过更“整洁”的操作,使输出结果在后续分析中更容易使用:输入和输出均为data.frame,便于读写、分析及绘图;使用管道操作符“%>%”组合函数,类似于linux的管道操作,使函数书写和前后过程更优雅;使用起来较为傻瓜式,可一步获得多种统计值。
tidyLPA的LPA执行式
然后展示一个示例。
tidyLPA的内置数据集“pisaUSA15”,记录了2015年PISA项目针对美国学生的某项调查数据,包含四项评估内容(变量):
broad_interest:学生兴趣的综合测量;
Enjoyment:学生娱乐的综合测量;
instrumental_mot:学生工具性动机的综合测量;
self_efficacy:学生自我效能的综合测量。
library(tidyLPA)
#数据集,详情 ?pisaUSA15
data(pisaUSA15)
head(pisaUSA15)
然后期望根据这些指示值,寻找潜在特征解释指示值之间的潜在结构,并通过LPA对学生个体进行分层,以及探究变量对学生分层的贡献。
library(dplyr)##LPA 分析,详情 ?estimate_profiles
#选择了部分数据演示,一是作为示例减少运行时间,二是展示这种管道符操作示例方法
#这里选择了前 100 行的观测对象,以及 3 种观测变量执行 LPA;划分 3 个潜在特征(类,class),并使用模型 1
#本示例未执行变量标准化
m3 <- pisaUSA15[1:100, ] %>%
select(broad_interest, enjoyment, self_efficacy) %>%
single_imputation() %>%
#scale() %>%
estimate_profiles(n_profiles = 3, variances = 'equal', covariances = 'zero', package = 'mclust')
##若不习惯使用管道符,以上就是这样的结构
#选择演示用的数据子集
pisaUSA15_select <- pisaUSA15[1:100,c('broad_interest', 'enjoyment', 'self_efficacy')]
#填补数据中的缺失值
pisaUSA15_select <- single_imputation(pisaUSA15_select)
#数据标准化,视实际情况而定;标准化方法可使用 scale()、poms() 等
#pisaUSA15_select <- scale(pisaUSA15_select)
#LPA 分析
m3 <- estimate_profiles(df = pisaUSA15_select, n_profiles = 3, variances = 'equal', covariances = 'zero', package = 'mclust')
由于tidyLPA主要作为其它R包的接口,因此在使用时需指定特定R包名称(事先确保这些已经安装),以调用它们的LPA方法使用。如这里调用mclust包的方法执行LPA。
n_profiles参数用于指定潜在特征的数量,以便确定最终识别多少潜在特征以解释变量间的关系,进而将对象聚为多少类。
tidyLPA目前提供了6种模型方法,对应于常见的不同需求,使用时根据是否以及如何估计变量方差和协方差来指定模型。可通过models参数指定,或者修改variances、covariances参数项指定。
通常,潜在特征数量的指定以及模型的选择需要基于多种来源的证据来确定,包括信息标准、统计检验、可解释性和简约性等。
以下为tidyLPA的6种模型方法:
(1)将方差限制为在各个类之间相等,并且协方差固定为0(变量的条件独立性),即等方差和零协方差的情形(models=1,或variance='equal',covariances='zero');
(2)不等方差和零协方差的情形(models=2,或variance='varying',covariances='zero');
(3)等方差和等协方差的情形(models=3,或variance='equal',covariances='equal');
(4)不等方差和等协方差的情形(models=4,或variance='varying',covariances='equal',无法通过mclust拟合,需使用MplusAutomation);
(5)等方差和不等协方差的情形(models=5,或variance='equal',covariances='varying',无法通过mclust拟合,需使用MplusAutomation);
(6)不等方差和不等协方差的情形(models=4,或variance='varying',covariances='varying')。
关于这些模型的简介,以及和其来源R包mclust、MplusAutomation的关系,可参考:
https://data-edu.github.io/tidyLPA/articles/Introduction_to_tidyLPA.html
就获得的LPA结果而言,每次结果会有微小的差别。
LPA潜剖面的参数估计
如上示例指定划分了3个潜在类(class,即潜在特征、潜剖面),可使用get_estimates()获取3个潜在class的均值方差估计、显著性p值等参数估计值。
结果反映了潜在class对于解释所观测的变量结构是否是有意义的。
#获取参数估计
m3_est <- get_estimates(m3)
m3_est
LPA的拟合优度评估
对于拟合优度的评估,tidyLPA可一次生成很多用于反映LPA拟合优度的统计指标。
#查看拟合统计量
m3_fit <- get_fit(m3)
m3_fit
例如:LogLik,给定模型的数据的对数似然值;AIC,Aikake信息准则;BIC,贝叶斯信息准则;BLRT,自举似然检验;等等指示值描述可参考该链接文末:
https://data-edu.github.io/tidyLPA/articles/Introduction_to_tidyLPA.html
例如,AIC、BIC的值越小代表了拟合度越高,即模型越可靠。存在多个备选模型时,可通过比较它们的AIC、BIC值,尽可能选择较低AIC、BIC值(精度原则)且潜在class更少(简约性原则)的模型。
当然,选择时也要综合考虑结果对于解释数据是否有意义的问题。
LPA的后验概率
同潜类别分析(LCA),LPA在获得理想的潜在class及其参数估计值后,继续计算变量反应每种组合分类到各潜在class的后验概率,然后根据后验概率的大小决定该组合应归入的潜在class。即通过观测变量和潜在class的关系,将观测对象划分归类。
#对象响应估计剖面的后验概率
m3_class <- get_data(m3)
m3_class
#绘制剖面图展示对象聚类
plot_profiles(m3)
表格结果中,每一行为一观测对象,排列顺序和输入数据集中的顺序相同;各列的信息分别表示选择的模型(本示例选择使用了模型1)、划分的class数量(本示例指定了划分3个潜在class)、数据集中的变量观测值、各对象响应潜在class的后验概率即其最终被划分的class(选择后验概率最高的那个)。
图片横轴为变量,纵轴为变量的值;各点代表观测对象,颜色表示了对象划分的潜在class。
如果做LPA的目的还包含实现对个体的聚类,则该过程是很有帮助的。
各类模型的比较执行及评估
此外,tidyLPA允许我们一次执行多种模型,或者设置不同的潜在class数量。在获得多种结果后,可综合比较它们以选择最合适的运行模式。
##多模型比较运行,管道符操作示例
#例如分别设置 1、2、3 个潜在特征,并选择两种模型运行
#最后通过 AIC、BIC 等值,评估拟合优度,并选择最适方法
pisaUSA15[1:100, ] %>%
select(broad_interest, enjoyment, self_efficacy) %>%
single_imputation() %>%
estimate_profiles(n_profiles = 1:3, variances = c('equal', 'varying'), covariances = c('zero', 'varying')) %>%
compare_solutions(statistics = c('AIC', 'BIC'))
当然这仅为机器自动评估的结果,实际分析中仅可作为参考使用,因为我们分析数据的最终目的是解释一定的自然/社会现象的,机器自动选择的“最佳模式”可能不具任何实际意义。